EC2にApptainerをインストールしてコンテナを動かしてみた
こんにちは!コンサル部のinomaso(@inomasosan)です。
最近HPC分野を勉強しており、ApptainerというHPCに特化したコンテナプラットフォームの調査や、簡単な検証環境を構築したのでブログにまとめていきます。
Apptainerとは?
概要
- HPCに特化したOSSのコンテナプラットフォームで、オンプレやクラウド上の様々なOS(Linux、Windows、Mac)で動作するよう設計されている。
- 元々Singularityという名前で開発されていたが、2021年11月にLinux Foundationへ移行が決まりApptainerへ名前が変更となった。
- コンテナイメージはSingularity Image Format(SIF)という形式を採用しているが、DockerイメージやOpen Containers Initiative (OCI)イメージ形式とも互換性がある。
- 背景についてはAI/HPC時代を実現するためのソフトウエア 「HPC向けコンテナSingularity開発動向」の以下を参照
特徴
- 暗号署名、イミュータブルコンテナイメージ形式、メモリ内での復号化により、検証可能な再現性とセキュリティを実現。
- クラスターまたはサーバー上でGPU、高速ネットワーク、並列ファイルシステムを簡単に利用可能。
- シングルファイルでコンテナイメージを管理できるため、他のHPCクラスターに簡単に持ち運びが可能。
- コンテナの内部と外部で同じユーザの権限を使用。
- root権限に昇格しホストを制御することはできない。
やってみた
今回は単一のEC2上にApptainerをインストールして、コンテナを起動してみました。
検証環境
今回構築した環境は以下の通りです。
項目 | バージョン |
---|---|
OS | Ubuntu Server 22.04 LTS |
AMI | ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-20230325 |
インスタンスタイプ | t3a.nano |
Apptainerインストール
Apptainer Admin Guide - Install Ubuntu packagesを参考にApptainerをインストールしてみます。
まずはsoftware-properties-common
パッケージをインストールして、add-apt-repository
コマンドを使えるようにします。
$ sudo apt update $ sudo apt install -y software-properties-common
ちなみに今回使用したAMIだとsoftware-properties-common
はインストール済みでした。
Reading package lists... Done Building dependency tree... Done Reading state information... Done software-properties-common is already the newest version (0.99.22.6). software-properties-common set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.
次に、Apptainerの外部リポジトリを登録し、Apptainerをインストールしていきます。
$ sudo add-apt-repository -y ppa:apptainer/ppa $ sudo apt update $ sudo apt install -y apptainer
ちなみに、古いLinuxディストリビューションの場合はsetuidバイナリを使用してコンテナのセットアップ操作の実行が必要なため、apptainer-suid
をインストール願います。
$ sudo add-apt-repository -y ppa:apptainer/ppa $ sudo apt update $ sudo apt install -y apptainer-suid
最後に、インストールが完了したらapptainer
コマンドが実行可能か確認するため、下記のバージョン確認のコマンドを実行します。
$ apptainer version
コンテナの起動
ApptainerはDockerおよびOCIコンテナをサポートしているため、Apptainer User Guide - Support for Docker and OCI Containersを参考に、Docker Hubからコンテナを起動できるか試していきます。
$ apptainer run docker://sylabsio/lolcow:latest INFO: Converting OCI blobs to SIF format INFO: Starting build... Getting image source signatures Copying blob 5ca731fc36c2 done Copying blob 16ec32c2132b done Copying config fd0daa4d89 done Writing manifest to image destination Storing signatures 2023/05/01 07:58:32 info unpack layer: sha256:16ec32c2132b43494832a05f2b02f7a822479f8250c173d0ab27b3de78b2f058 2023/05/01 07:58:33 info unpack layer: sha256:5ca731fc36c28789c5ddc3216563e8bfca2ab3ea10347e07554ebba1c953242e INFO: Creating SIF file... INFO: underlay of /etc/localtime required more than 50 (77) bind mounts _____________________________ < Mon May 1 07:58:59 UTC 2023 > ----------------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
出力の最初にINFO: Converting OCI blobs to SIF format
とある通り、OCI形式からSIF形式への変換を含めてワンライナーのコマンドで簡単に実行できることがわかりました。
コンテナのイメージ保存
任意の場所に変換したSIFファイルを保存することもできます。
$ apptainer pull docker://sylabsio/lolcow INFO: Using cached SIF image $ ls -la total 73272 drwxrwxrwt 11 root root 4096 May 1 08:03 . drwxr-xr-x 19 root root 4096 May 1 07:52 .. -rwxr-xr-x 1 ssm-user ssm-user 74985472 May 1 08:03 lolcow_latest.sif
EC2のUser DataでApptainerをインストール
ApptainerをEC2の起動時に自動インストールできるよう、簡易的なスクリプトを用意しました。
#!/bin/bash apt update apt install -y software-properties-common add-apt-repository -y ppa:apptainer/ppa apt update apt install -y apptainer
参考
- Apptainer Admin Guide
- Apptainer User Guide
- Scrapbox Apptainer
- AI/HPC時代を実現するためのソフトウエア 「HPC向けコンテナSingularity開発動向」
まとめ
Apptainerを調査し、単一のEC2上にインストールやコンテナの動作確認をしてみました。
Docker関連のコンテナイメージを動かすことはできますがApptainerにはコンテナオーケストレータは存在しないため、HPC以外の用途には素直に他のコンテナプラットフォームを検討して頂くのが良いかと思います。
この記事が、どなたかのお役に立てば幸いです。それでは!